/*******************************I.MAX6UL启动文件,完成C环境初始化*****************************************/

.global _start_                /*全局标号*/

_start:         //label  程序从此函数开始执行,此函数主要是设置C运行环境   相当于一个_start函数
    /*进入SVC模式*/
    mrs r0,cpsr                     /*将CPSR中的内容传递给R0*/
    bic r0,r0,#0x1f   //位清除指令   BIC Rd,Rn 等同于 Rd=Rd & (~Rn)    BIC Rd,Rn,#immed 等同于 Rd=Rn & (~#immed)  BIC Rd,Rn,Rm  等同于 Rd=Rn & (~Rm)
    //上面是将r0中的低5位清零   CPSR中的 M[4:0]是处理器模式控制位
    orr r0,r0,#0x13   //按位或指令   ORR Rd,Rn 等同于 Rd=Rd | Rn      ORR Rd,Rn,#immed 等同于 Rd=Rn | #immed    ORR Rd,Rn,Rm 等同于 Rd=Rn | Rm
    //上面将M[4:0]设置成 10011 (Supervisor SVC模式)
    msr cpsr,r0       //这里将r0中的数据写入到cpsr中去
    ldr sp,=0x80200000   //设置栈指针   MOV sp,#0x80200000   因为I.MAX6UL上的DDR3的地址范围是 0x80000000~0xA0000000(512MB)/0x90000000(256MB) 
    b main               //跳转到main函数    由于Cortex-A7 的堆栈是向下增长的,所以SP指针为0x80200000,故SVC模式的栈大小0x80200000 - 0x80000000
                         //0x200000   =2MB    0X87800000  这里是链接地址

    